package com.lxl.priv.bak;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * @author Administrator
 */
public class MultiThreadedProcessing {

    public static void main(String[] args) throws Exception {
        // 创建一个固定大小的线程池
        ExecutorService executor = Executors.newFixedThreadPool(8);
        // 用来存储异步执行的结果
        List<Future<String>> results = new ArrayList<>();
        // 假设这是你要处理的大批量数据
        List<Integer> data = getData();
        long start = System.currentTimeMillis();
        for (final Integer datum : data) {
            Future<String> future = executor.submit(new Callable<String>() {
                @Override
                public String call() throws Exception {
                    // 处理数据的逻辑
                    return "Processed data: " + datum;
                }
            });
            // 将Future添加到列表中
            results.add(future);
        }

        // 关闭线程池，这将不再接受新任务，但会处理完已提交的任务
        executor.shutdown();

        // 按提交顺序获取结果
        for (Future<String> result : results) {
            // 打印处理后的数据
            System.out.println(result.get());
        }
        long end = System.currentTimeMillis();
        System.out.println("耗时：" + (end - start) + "ms");
    }

    private static List<Integer> getData() {
        // 这里生成示例数据
        List<Integer> data = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            data.add(i);
        }
        return data;
    }
}
